{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 训练轮数与callbacks\n",
    "在本例中，通过比较**同样结构**，**同样优化器**，**同样数据集**下**不同epoch**以及**不同callbacks方法**下训练的值得出训练轮数与callbacks方法对训练的影响。\n",
    "\n",
    "训练轮数决定了训练达到的程度，在接下来的实验中，我们尝试了逐步增加训练轮数，观察模型在不同阶段的收敛情况。以5轮次为单位进行观察。\n",
    "#### 注意： 每一个5轮次训练大约耗时20分钟。\n",
    "callbacks方法中，我们将介绍：\n",
    "- ModelCheckpoint\n",
    "- EarlyStopping\n",
    "- ReduceLROnPlateau\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "实验之前我们进行keras，keras_applications版本配置以及数据集下载。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "!pip install --upgrade keras_applications==1.0.6 keras==2.2.4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Successfully download file modelarts-labs/end2end/image_recognition/dog_and_cat_25000.tar.gz from OBS to local ./dog_and_cat_25000.tar.gz\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "if os.path.exists('./data') == False:\n",
    "    from modelarts.session import Session\n",
    "    session = Session()\n",
    "\n",
    "    session.download_data(\n",
    "        bucket_path=\"modelarts-labs/end2end/image_recognition/dog_and_cat_25000.tar.gz\",\n",
    "        path=\"./dog_and_cat_25000.tar.gz\")\n",
    "\n",
    "    # 使用tar命令解压资源包\n",
    "    !tar xf ./dog_and_cat_25000.tar.gz\n",
    "\n",
    "    # 清理压缩包\n",
    "    !rm -f ./dog_and_cat_25000.tar.gz"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "!mkdir model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 引入相关的包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "from keras.applications.vgg16 import VGG16\n",
    "from keras.preprocessing import image\n",
    "import numpy as np\n",
    "\n",
    "from keras.preprocessing import image\n",
    "from keras.models import Model\n",
    "from keras.layers import Dense, GlobalAveragePooling2D\n",
    "from keras import backend as K\n",
    "from keras.models import load_model\n",
    "\n",
    "from keras.preprocessing.image import ImageDataGenerator"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "from PIL import Image\n",
    "def load_data():\n",
    "    dirname = \"./data\"\n",
    "    path = \"./data\"\n",
    "\n",
    "    num_train_samples = 25000\n",
    "\n",
    "    x_train = np.empty((num_train_samples, 224,224,3), dtype='uint8')\n",
    "    y_train = np.empty((num_train_samples,1), dtype='uint8')\n",
    "    index = 0\n",
    "    for file in os.listdir(\"./data\"):\n",
    "        image = Image.open(os.path.join(dirname,file)).resize((224,224))\n",
    "        image = np.array(image)\n",
    "        x_train[index,:,:,:] = image\n",
    "\n",
    "        if \"cat\" in file:\n",
    "            y_train[index,0] =1\n",
    "        elif \"dog\" in file:\n",
    "            y_train[index,0] =0\n",
    "\n",
    "        index += 1\n",
    "    return (x_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "(x_train, y_train) = load_data()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(25000, 224, 224, 3)\n",
      "(25000, 1)\n"
     ]
    }
   ],
   "source": [
    "print(x_train.shape)\n",
    "print(y_train.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "from keras.utils import np_utils\n",
    "def process_data(x_train,y_train):\n",
    "    x_train = x_train.astype(np.float32)\n",
    "    x_train /= 255\n",
    "    n_classes = 2\n",
    "    y_train = np_utils.to_categorical(y_train, n_classes)\n",
    "    return x_train,y_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(25000, 224, 224, 3)\n",
      "(25000, 2)\n"
     ]
    }
   ],
   "source": [
    "x_train,y_train= process_data(x_train,y_train)\n",
    "print(x_train.shape)\n",
    "print(y_train.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 构建模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "def build_model(base_model):\n",
    "    x = base_model.output\n",
    "    x = GlobalAveragePooling2D()(x)\n",
    "    predictions = Dense(2, activation='softmax')(x)\n",
    "    model = Model(inputs=base_model.input, outputs=predictions)\n",
    "    print(type(model))\n",
    "    return model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /home/ma-user/anaconda3/envs/TensorFlow-1.13.1/lib/python3.6/site-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Colocations handled automatically by placer.\n"
     ]
    }
   ],
   "source": [
    "base_model = VGG16(weights=None, include_top=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'keras.engine.training.Model'>\n",
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "input_1 (InputLayer)         (None, None, None, 3)     0         \n",
      "_________________________________________________________________\n",
      "block1_conv1 (Conv2D)        (None, None, None, 64)    1792      \n",
      "_________________________________________________________________\n",
      "block1_conv2 (Conv2D)        (None, None, None, 64)    36928     \n",
      "_________________________________________________________________\n",
      "block1_pool (MaxPooling2D)   (None, None, None, 64)    0         \n",
      "_________________________________________________________________\n",
      "block2_conv1 (Conv2D)        (None, None, None, 128)   73856     \n",
      "_________________________________________________________________\n",
      "block2_conv2 (Conv2D)        (None, None, None, 128)   147584    \n",
      "_________________________________________________________________\n",
      "block2_pool (MaxPooling2D)   (None, None, None, 128)   0         \n",
      "_________________________________________________________________\n",
      "block3_conv1 (Conv2D)        (None, None, None, 256)   295168    \n",
      "_________________________________________________________________\n",
      "block3_conv2 (Conv2D)        (None, None, None, 256)   590080    \n",
      "_________________________________________________________________\n",
      "block3_conv3 (Conv2D)        (None, None, None, 256)   590080    \n",
      "_________________________________________________________________\n",
      "block3_pool (MaxPooling2D)   (None, None, None, 256)   0         \n",
      "_________________________________________________________________\n",
      "block4_conv1 (Conv2D)        (None, None, None, 512)   1180160   \n",
      "_________________________________________________________________\n",
      "block4_conv2 (Conv2D)        (None, None, None, 512)   2359808   \n",
      "_________________________________________________________________\n",
      "block4_conv3 (Conv2D)        (None, None, None, 512)   2359808   \n",
      "_________________________________________________________________\n",
      "block4_pool (MaxPooling2D)   (None, None, None, 512)   0         \n",
      "_________________________________________________________________\n",
      "block5_conv1 (Conv2D)        (None, None, None, 512)   2359808   \n",
      "_________________________________________________________________\n",
      "block5_conv2 (Conv2D)        (None, None, None, 512)   2359808   \n",
      "_________________________________________________________________\n",
      "block5_conv3 (Conv2D)        (None, None, None, 512)   2359808   \n",
      "_________________________________________________________________\n",
      "block5_pool (MaxPooling2D)   (None, None, None, 512)   0         \n",
      "_________________________________________________________________\n",
      "global_average_pooling2d_1 ( (None, 512)               0         \n",
      "_________________________________________________________________\n",
      "dense_1 (Dense)              (None, 2)                 1026      \n",
      "=================================================================\n",
      "Total params: 14,715,714\n",
      "Trainable params: 14,715,714\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "model = build_model(base_model)\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型训练"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5 epoch训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "import keras \n",
    "opt = keras.optimizers.rmsprop(lr=0.0001, decay=1e-6)\n",
    "model.compile(loss='binary_crossentropy',\n",
    "              optimizer=opt,\n",
    "              metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "from keras.callbacks import ModelCheckpoint, EarlyStopping, ReduceLROnPlateau\n",
    "es = EarlyStopping(monitor='val_acc', min_delta=0.001, patience=5, verbose=1, mode='auto')\n",
    "cp = ModelCheckpoint(filepath=\"./model/ckp_vgg16_dog_and_cat.h5\", monitor=\"val_acc\", verbose=1, save_best_only=True, mode=\"auto\", period=1)\n",
    "lr = ReduceLROnPlateau(monitor=\"val_acc\", factor=0.1, patience=3, verbose=1, mode=\"auto\", min_lr=0)\n",
    "callbacks = [es,cp,lr]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /home/ma-user/anaconda3/envs/TensorFlow-1.13.1/lib/python3.6/site-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use tf.cast instead.\n",
      "Train on 18750 samples, validate on 6250 samples\n",
      "Epoch 1/5\n",
      "18750/18750 [==============================] - 176s 9ms/step - loss: 0.6664 - acc: 0.5893 - val_loss: 0.6203 - val_acc: 0.6547\n",
      "\n",
      "Epoch 00001: val_acc improved from -inf to 0.65472, saving model to ./model/ckp_vgg16_dog_and_cat.h5\n",
      "Epoch 2/5\n",
      "18750/18750 [==============================] - 164s 9ms/step - loss: 0.6031 - acc: 0.6736 - val_loss: 0.5685 - val_acc: 0.7018\n",
      "\n",
      "Epoch 00002: val_acc improved from 0.65472 to 0.70176, saving model to ./model/ckp_vgg16_dog_and_cat.h5\n",
      "Epoch 3/5\n",
      "18750/18750 [==============================] - 164s 9ms/step - loss: 0.5573 - acc: 0.7200 - val_loss: 0.6744 - val_acc: 0.7107\n",
      "\n",
      "Epoch 00003: val_acc improved from 0.70176 to 0.71072, saving model to ./model/ckp_vgg16_dog_and_cat.h5\n",
      "Epoch 4/5\n",
      "18750/18750 [==============================] - 163s 9ms/step - loss: 0.4789 - acc: 0.7725 - val_loss: 0.4174 - val_acc: 0.8075\n",
      "\n",
      "Epoch 00004: val_acc improved from 0.71072 to 0.80752, saving model to ./model/ckp_vgg16_dog_and_cat.h5\n",
      "Epoch 5/5\n",
      "18750/18750 [==============================] - 163s 9ms/step - loss: 0.3898 - acc: 0.8216 - val_loss: 0.3494 - val_acc: 0.8622\n",
      "\n",
      "Epoch 00005: val_acc improved from 0.80752 to 0.86224, saving model to ./model/ckp_vgg16_dog_and_cat.h5\n"
     ]
    }
   ],
   "source": [
    "history = model.fit(x=x_train, \n",
    "                  y=y_train, \n",
    "                  batch_size=16, \n",
    "                  epochs=5, \n",
    "                  verbose=1, \n",
    "                  callbacks=callbacks, \n",
    "                  validation_split=0.25, \n",
    "                  shuffle=True, \n",
    "                  initial_epoch=0, \n",
    "                 )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 绘制训练 & 验证的准确率值\n",
    "plt.plot(history.history['acc'])\n",
    "plt.plot(history.history['val_acc'])\n",
    "plt.title('Model accuracy')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.xlabel('Epoch')\n",
    "plt.legend(['Train', 'Test'], loc='upper left')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制训练 & 验证的损失值\n",
    "plt.plot(history.history['loss'])\n",
    "plt.plot(history.history['val_loss'])\n",
    "plt.title('Model loss')\n",
    "plt.ylabel('Loss')\n",
    "plt.xlabel('Epoch')\n",
    "plt.legend(['Train', 'Test'], loc='upper left')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 10 epoch 训练\n",
    "**在下面的训练中，epoch将再训练5轮**\n",
    "#### Epoch\n",
    "\n",
    "在Epoch数值较小时，出现了上一个训练中出现的欠拟合情况，模型没有很好收敛训练便结束了。在接下来的训练中，我们提高了epoch的值，通过训练结果我们可以看到模型逐渐收敛。但是epoch的值并非越大越好，过大的epoch值可能会导致过拟合现象。\n",
    "\n",
    "![over-fitting](./img/fitting.png)\n",
    "\n",
    "epoch的值没有具体的公式进行计算，需要根据经验和具体的情况进行制定。更多的epoch训练大家可以在拓展中进行尝试。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### ModelCheckpoint\n",
    "在模型训练过程中，ModelCheckpoint将出现的最好的权重进行保存。\n",
    "在下面的训练中，每一次出现更好的模型，epoch完成后都进行了保存。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### ReduceLROnPlateau\n",
    "学习率衰减方法，在指定epoch数量结束后检测指标时候有提升，如果提升较小，便进行学习率衰减。在接下来的训练中，通过`ReduceLROnPlateau`方法，学习率进行了多次调整，调整之后的模型的指标有所提升。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 18750 samples, validate on 6250 samples\n",
      "Epoch 1/5\n",
      "18750/18750 [==============================] - 164s 9ms/step - loss: 0.3249 - acc: 0.8578 - val_loss: 0.6155 - val_acc: 0.7531\n",
      "\n",
      "Epoch 00001: val_acc did not improve from 0.86224\n",
      "Epoch 2/5\n",
      "18750/18750 [==============================] - 166s 9ms/step - loss: 0.2831 - acc: 0.8798 - val_loss: 0.2328 - val_acc: 0.9030\n",
      "\n",
      "Epoch 00002: val_acc improved from 0.86224 to 0.90304, saving model to ./model/ckp_vgg16_dog_and_cat.h5\n",
      "Epoch 3/5\n",
      "18750/18750 [==============================] - 165s 9ms/step - loss: 0.2471 - acc: 0.8962 - val_loss: 0.2751 - val_acc: 0.8858\n",
      "\n",
      "Epoch 00003: val_acc did not improve from 0.90304\n",
      "Epoch 4/5\n",
      "18750/18750 [==============================] - 164s 9ms/step - loss: 0.2215 - acc: 0.9078 - val_loss: 0.1983 - val_acc: 0.9179\n",
      "\n",
      "Epoch 00004: val_acc improved from 0.90304 to 0.91792, saving model to ./model/ckp_vgg16_dog_and_cat.h5\n",
      "Epoch 5/5\n",
      "18750/18750 [==============================] - 164s 9ms/step - loss: 0.1954 - acc: 0.9203 - val_loss: 0.2674 - val_acc: 0.9032\n",
      "\n",
      "Epoch 00005: val_acc did not improve from 0.91792\n"
     ]
    }
   ],
   "source": [
    "history_more_steps = model.fit(x=x_train, \n",
    "                  y=y_train, \n",
    "                  batch_size=16, \n",
    "                  epochs=5, \n",
    "                  verbose=1, \n",
    "                  callbacks=callbacks, \n",
    "                  validation_split=0.25, \n",
    "                  shuffle=True, \n",
    "                  initial_epoch=0, \n",
    "                 )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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XR50TJk6x4HHcJfQOuzYsWOkp6f3+iQCICKkp6f3mdaXMSaywplIVgHjRGSUiCTgpj1dEryDiGQEpvDEtTQWe+sTgBdwHfHPNzsmy/spuKlE13c2wL6QRAL60ns1xkRW2BKJqtbjpuVcipuq8zlV3SAi94nI1d5u5wFbROQD3FSmP/TWXwd8DLi5hTLfp0VkHW7Y7QzgB+F6D8YY09M0NCrb9tXw4poSfvTKJo7WNrR/UBeFtY9EVV8BXmm27t6gx8/j5nRoftxvODHZUPNtF3RzmL6oqKjgwgsvBGDPnj3ExsaSmekK01auXElCQkK757jlllu4++67GT9+fFhjNcZEp7qGRrburWF9aSUbSirZUFrFxrIqjnjJIyE2hn85fTgTs1LaOVPX+N3Z3melp6ezZo27Bea73/0uAwcO5Otf//pJ+6gqqkpMTMsNx8ceeyzscRpjosOxugY2lVWxvrSKjaWVrC+pYsueamobXB1S/4RYJmWncF3BCCZlpzB5eCpjhwwkPjb8QypaIoky27Zt4+qrr+b000/n/fff57XXXuN73/se7733HkePHuX666/n3ntdo+7ss8/mwQcfZPLkyWRkZHD77bfz6quv0r9/f1588UWGDBni87sxpps0NsD6P8KH78CwqTBiNgyZBLG98yus6lgdG0urWF9S6X6WVrJtXw2NXv1pWv94JmencstZeUwansrk7BTy0gcQE+NPX2jv/FfooO+9tIGNpVXdes787BS+c9WkTh27efNmnnzySQoKCgC4//77GTx4MPX19Zx//vlce+215OefPEhAZWUl5557Lvfffz9f/epXWbx4MXfffcqoNMb0LIEE8vYDULEVEgbCe0+6bQkDIacARsxxS04BJKb6G28nVNQcZ31pFRtKK9lQ4pLGroojTduHpvRjcnYq8yYNY9LwVCZlpzA8LSmqCmgskUShMWPGNCURgGeeeYZHH32U+vp6SktL2bhx4ymJJCkpicsuuwyAmTNn8ve//z2iMRvTrZonkCGT4LonYcJVUFUMu1fCR8th9wp4579BGwGBoZNca2XEGe7noDyIki9cVaWs8hgbvJbGhlLXp1FWeaIsP3dw/5MuT03KTiUzuZ+PUYfGEgl0uuUQLgMGDGh6vHXrVn7+85+zcuVK0tLSuPHGG1u8HyS4cz42Npb6+vqIxGpMt2psgPV/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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 绘制训练 & 验证的准确率值\n",
    "plt.plot(history_more_steps.history['acc'])\n",
    "plt.plot(history_more_steps.history['val_acc'])\n",
    "plt.title('Model accuracy')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.xlabel('Epoch')\n",
    "plt.legend(['Train', 'Test'], loc='upper left')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制训练 & 验证的损失值\n",
    "plt.plot(history_more_steps.history['loss'])\n",
    "plt.plot(history_more_steps.history['val_loss'])\n",
    "plt.title('Model loss')\n",
    "plt.ylabel('Loss')\n",
    "plt.xlabel('Epoch')\n",
    "plt.legend(['Train', 'Test'], loc='upper left')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### EarlyStopping 早停法\n",
    "根据上一个训练可以看到，在训练的后期模型的loss和acc数值已经稳定，这时候继续训练没有对数值产生影响还有可能产生过拟合情况，所以需要及时将模型训练停止。EarlyStopping（早停法）检测模型的某一项指标，如果在指定步数中指标没有提升，则将模型训练停止。\n",
    "\n",
    "在下面的训练中如果训练没有显著提升，则停止训练。\n",
    "\n",
    "#### 注意：可以修改早停参数，进行模型训练停止。当前模型训练上限为20轮次，如果模型val_acc没有0.001提升则停止。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "es = EarlyStopping(monitor='val_acc', min_delta=0.001, patience=1, verbose=1, mode='auto')\n",
    "cp = ModelCheckpoint(filepath=\"./model/ckp_vgg16_dog_and_cat.h5\", monitor=\"val_acc\", verbose=1, save_best_only=True, mode=\"auto\", period=1)\n",
    "lr = ReduceLROnPlateau(monitor=\"val_acc\", factor=0.1, patience=3, verbose=1, mode=\"auto\", min_lr=0)\n",
    "callbacks = [es,cp,lr]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 18750 samples, validate on 6250 samples\n",
      "Epoch 1/20\n",
      "18750/18750 [==============================] - 159s 8ms/step - loss: 0.1350 - acc: 0.9506 - val_loss: 0.1675 - val_acc: 0.9357\n",
      "\n",
      "Epoch 00001: val_acc improved from -inf to 0.93568, saving model to ./model/ckp_vgg16_dog_and_cat.h5\n",
      "Epoch 2/20\n",
      "18750/18750 [==============================] - 161s 9ms/step - loss: 0.1276 - acc: 0.9523 - val_loss: 0.1752 - val_acc: 0.9338\n",
      "\n",
      "Epoch 00002: val_acc did not improve from 0.93568\n",
      "Epoch 00002: early stopping\n"
     ]
    }
   ],
   "source": [
    "history_steps_15 = model.fit(x=x_train, \n",
    "                  y=y_train, \n",
    "                  batch_size=16, \n",
    "                  epochs=20, \n",
    "                  verbose=1, \n",
    "                  callbacks=callbacks, \n",
    "                  validation_split=0.25, \n",
    "                  shuffle=True, \n",
    "                  initial_epoch=0, \n",
    "                 )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制训练 & 验证的损失值\n",
    "plt.plot(history_steps_15.history['loss'])\n",
    "plt.plot(history_steps_15.history['val_loss'])\n",
    "plt.title('Model loss')\n",
    "plt.ylabel('Loss')\n",
    "plt.xlabel('Epoch')\n",
    "plt.legend(['Train', 'Test'], loc='upper left')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制训练 & 验证的准确率值\n",
    "plt.plot(history_steps_15.history['acc'])\n",
    "plt.plot(history_steps_15.history['val_acc'])\n",
    "plt.title('Model accuracy')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.xlabel('Epoch')\n",
    "plt.legend(['Train', 'Test'], loc='upper left')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 拓展\n",
    "\n",
    "- 可以尝试自己定义学习率衰减规律。使用`LearningRateScheduler`方法，自己定义学习率衰减。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "TensorFlow-1.13.1",
   "language": "python",
   "name": "tensorflow-1.13.1"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
